<?php

namespace tch\core\db;

/**
 * Db适配器接口定义
 */
interface AdapterInterface
{
    /**
     * SQL指令安全过滤
     * @param string $str  SQL字符串
     * @return string
     */
    public function escapeString($str);
    public function close();
    
    /**
     * 启动事务
     * @return void
     */
    public function startTrans();
    
    /**
     * 用于非自动提交状态下面的查询提交
     * @return boolean
     */
    public function commit();
    
    /**
     * 事务回滚
     * @return boolean
     */
    public function rollback();
    
    /**
     * 获取最近的错误信息
     * @return string
     */
    public function getError();
    
    /**
     * 获取最近插入的ID
     * @return string
     */
    public function getLastInsID();
    
    /**
     * 获取最近一次查询的sql语句 
     * @param string $model  模型名
     * @return string
     */
    public function getLastSql($model);
    public function getFields($tableName);
    public function parseSql($sql);
    
    /**
     * 设置当前操作模型
     * @param string $model  模型名
     * @return void
     */
    public function setModel($model);
    
    /**
     * 执行语句
     * @param string $sql  sql指令
     * @param boolean $fetchSql  不执行只是获取SQL
     * @return mixed
     */
    public function execute($sql, $fetchSql = false);
    
    /**
     * 执行查询 返回数据集
     * @param string $sql  sql指令
     * @param boolean $fetchSql  不执行只是获取SQL
     * @return mixed
     */
    public function query($sql, $fetchSql = false);

    public function procedure($sql, $parse = false);
    
    /**
     * 查找记录
     * @param array $options 表达式
     * @return mixed
     */
    public function select($options = []);
    
    /**
     * 删除记录
     * @param array $options 表达式
     * @return false | integer
     */
    public function delete($options = []);
    
    /**
     * 更新记录
     * @param mixed $data 数据
     * @param array $options 表达式
     * @return false | integer
     */
    public function update($data, $options = []);
    
    /**
     * 通过Select方式插入记录
     * @param string $fields 要插入的数据表字段名
     * @param string $table 要插入的数据表名
     * @param array $options  查询数据参数
     * @return false | integer
     */
    public function selectInsert($fields, $table, $options = []);
    
    /**
     * 批量插入记录
     * @param mixed $dataSet 数据集
     * @param array $options 参数表达式
     * @param boolean $replace 是否replace
     * @return false | integer
     */
    public function insertAll($dataSet, $options = [], $replace = false);
    
    /**
     * 插入记录
     * @param mixed $data 数据
     * @param array $options 参数表达式
     * @param boolean $replace 是否replace
     * @return false | integer
     */
    public function insert($data, $options = [], $replace = false);
}

